#include <taskManager.h>
void schedulerInit(struct taskManageDef *taskMmg)
{
    int i;
    if (!(taskMmg && taskMmg->t))
    {
        return;
    }
    for (i = 0; i < taskMmg->taskLen; i++)
    {
        if(taskMmg->t[i].initFunc)
        {
            taskMmg->t[i].initFunc();
        }
    }
    return;
}

void schedulerQuit(struct taskManageDef *taskMmg)
{
    int i;
    if (!(taskMmg && taskMmg->t))
    {
        return;
    }
    for (i = 0; i < taskMmg->taskLen; i++)
    {
        if(taskMmg->t[i].quitFunc)
        {
            taskMmg->t[i].quitFunc();
        }
    }
    return;
}

void schedulerRun(struct taskManageDef *taskMmg)
{
    sysTmrType now = systemNowMs();
    sysTmrType dt;
    sysTmrType tmpNow = now; // get the time after run a runFunc .
    int i, j = 0;
    if (!(taskMmg && taskMmg->t))
    {
        return;
    }
    for (i = 0; i < taskMmg->taskLen; i++)
    {
        j = CYCLE_ADD(i, taskMmg->taskIndex, taskMmg->taskLen);
        dt = now - taskMmg->t[j].lastTaskTime;
        if (dt >= taskMmg->t[j].intervalTime)
        {
            taskMmg->t[j].lastTaskTime = systemNowMs();
            if(taskMmg->t[j].runFunc)
            {
                taskMmg->t[j].runFunc();
            }
            tmpNow = systemNowMs();
            if (tmpNow - now >= TASK_MAX_RUN_TIME_MS)
            {
                break;
            }
        }
    }
    taskMmg->taskIndex = CYCLE_ADD(j, 1, taskMmg->taskLen);
    return;
}

